"use strict";
/**
 * [填充下拉列表]
 * @param  {[type]} $         [description]
 * @param  {[type]} window    [description]
 * @param  {[type]} document  [description]
 * @param  {[type]} undefined [description]
 * @return {[type]}           [description]
 * @example [$(this).mmcBindSelect({
 *          	handlerUrl:'xxx.ashx',
 *          	params:'action=getFieldList&&classify=B'
 *          	// 或者
 *          	params:{
 *          		action:"getFieldList",
 *          		classify:"B"
 *          	},
 *              // 是否展示=请选择=	，默认为true
 *              showAll: false,
 *              // change 事件
 *              change： function（）{}
 *          });]
 */
;
(function ($, window, document, undefined) {
    // 声明默认属性对象
    var pluginName = "mmcBindSelect",
        defaults = {
            handlerUrl: "",
            params: "",
            showAll: true
        };

    // 构造函数
    function Plugin(element, options) {
        this.element = element;
        this.settings = $.extend({}, defaults, options);
        this._defaults = defaults;
        this._name = pluginName;
        this.init();
    }

    // 为了避免和原型对象Plugin.prototype的冲突，这地方采用继承原型对象的方法
    $.extend(Plugin.prototype, {
        init: function () {
            // 初始化，由于继承自Plugin原型，
            // 你可以在这里直接使用this.element或者this.settings
            var self = this;
            if (self.settings.handlerUrl !== "") {
                $.ajax({
                    url: self.settings.handlerUrl,
                    type: "post",
                    data: self.settings.params,
                    dataType: "json",
                    success: function (result) {
                        if (result.errMsg !== "") {
                            self.element.empty();
                            if (self.settings.showAll) self.append("<option value=''>===请选择===<option/>");
                            $.each(result, function (i, item) {
                                self.element.append($("<option/>").text(item.text).val(item.value));
                            });
                        }
                    },
                    error: function (error) {
                        console.log(error);
                    }
                });
            }
        }
    });

    // 对构造函数的一个轻量级封装，
    // 防止产生多个实例
    $.fn[pluginName] = function (options) {
        this.each(function () {
            if (!$.data(this, "plugin_" + pluginName)) {
                $.data(this, "plugin_" + pluginName, new Plugin(this, options));
            }
        });

        // 方便链式调用
        return this;
    };
})(jQuery, window, document);

// 再写一个绑定select2的插件